package web;

import java.util.ArrayList;
import java.util.List;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import org.birrap.ejb.BaresCervezasTapasVasosTBeanLocal;
import org.birrap.ejb.BaresTBeanLocal;
import org.birrap.entities.BaresCervezasTapasVasosT;
import org.birrap.entities.BaresT;

@ManagedBean
@SessionScoped
public class BuscarManagedBean {
    
    @EJB
    private BaresTBeanLocal baresTBeanLocal;
    
    @EJB
    private BaresCervezasTapasVasosTBeanLocal baresCervezasTapasVasosBean;
    
    private List<BaresT> listaBaresT;
    
    private BaresT selectedBar;
    
    private DetalleManagedBean detalleManagedBean;
    
     private double cervezaMasBarataEnBar;
    
    private String paramNombre;
    private String paramcodPostal;
    private String paramMarcaCerveza;
    private Double paramPrecioDesde = Double.valueOf("0");
    private Double paramPrecioHasta = Double.valueOf("0");
    
    
    private List<BaresCervezasTapasVasosT> listaCervezas;

    public BuscarManagedBean() {
                listaCervezas = new ArrayList<BaresCervezasTapasVasosT>();

    }

    public void buscar ()
    {
        String sql = "select distinct (B.ID_BAR) " +
                     "from BARES_CERVEZAS_TAPAS_VASOS_T BCTV " +
                           "join BARES_T B on BCTV.ID_BAR = B.ID_BAR " +
                           "join CERVEZAS_T C on BCTV.ID_CERVEZA = C.ID_CERVEZA " +
                     "where 1 = 1 ";
        String condiciones = "";
        
        if(paramNombre != null && !paramNombre.isEmpty())
        {
            condiciones = condiciones + "and UPPER(B.NOMBRE) LIKE UPPER('%" + paramNombre + "%') ";
        }
        if(paramcodPostal != null && !paramcodPostal.isEmpty())
        {
            condiciones = condiciones + "and B.CODIGO_POSTAL = " + Integer.valueOf(paramcodPostal) + " ";
        }
        if(paramMarcaCerveza != null && !paramMarcaCerveza.isEmpty())
        {
            condiciones = condiciones + "and UPPER(C.MARCA) like UPPER('%" + paramMarcaCerveza + "%') ";
        }
        if(paramPrecioDesde > 0)
        {
            condiciones = condiciones + "and BCTV.PRECIO > " + paramPrecioDesde + " ";
        }
        if(paramPrecioHasta > 0)
        {
            condiciones = condiciones + "and BCTV.PRECIO < " + paramPrecioHasta + " ";
        }
        if(paramPrecioHasta > 0)
        {
            condiciones = condiciones + "and BCTV.PRECIO < " + paramPrecioHasta + " ";
        }
        
        paramPrecioDesde = Double.valueOf("0");
        paramPrecioHasta = Double.valueOf("0");
        
        listaBaresT = baresTBeanLocal.executeSql(sql + condiciones);
    }
    
    public String irADetalles ()
    {
        FacesContext facesContext = FacesContext.getCurrentInstance(); 
        
        detalleManagedBean = FacesContext.getCurrentInstance()
                                         .getApplication()
                                         .evaluateExpressionGet(facesContext, 
                                                                "#{detalleManagedBean}", 
                                                                DetalleManagedBean.class); 
        detalleManagedBean.setBar(selectedBar);
        
        return "DETALLE";
    }
    
    public double getcervezaMasBarataEnBar(BaresCervezasTapasVasosT barCerTapVaso)
    {
        cervezaMasBarataEnBar = 
                baresCervezasTapasVasosBean.findMasBarataByIdBar(barCerTapVaso.getBaresT()
                                           .getIdBar());
        return cervezaMasBarataEnBar;
    }
    
    public List<BaresCervezasTapasVasosT> getListaCervezas(BaresT bar){
        
                if(bar!=null){
            

            
            listaCervezas = new ArrayList<BaresCervezasTapasVasosT>();
            List<BaresCervezasTapasVasosT> coleccionBares = new ArrayList<BaresCervezasTapasVasosT>();
            
            if(baresCervezasTapasVasosBean.findBaresByIdBar(bar.getIdBar())!=null){
                coleccionBares = new ArrayList(baresCervezasTapasVasosBean.findBaresByIdBar(bar.getIdBar()));
            }

            for(int i=0; i!=coleccionBares.size(); i++)
            {

                    if(coleccionBares.get(i)!=null  && listaCervezas!=null){
                        listaCervezas.add(coleccionBares.get(i));

                }
            }
        }
        return listaCervezas;
        
    }
    
    public String getParamNombre() {
        return paramNombre;
    }

    public void setParamNombre(String paramNombre) {
        this.paramNombre = paramNombre;
    }

    public String getParamcodPostal() {
        return paramcodPostal;
    }

    public void setParamcodPostal(String paramcodPostal) {
        this.paramcodPostal = paramcodPostal;
    }

    public BaresTBeanLocal getBaresTBeanLocal() {
        return baresTBeanLocal;
    }

    public void setBaresTBeanLocal(BaresTBeanLocal baresTBeanLocal) {
        this.baresTBeanLocal = baresTBeanLocal;
    }

    public List<BaresT> getListaBaresT() {
        return listaBaresT;
    }
    
    public String getParamMarcaCerveza() {
        return paramMarcaCerveza;
    }

    public void setParamMarcaCerveza(String paramMarcaCerveza) {
        this.paramMarcaCerveza = paramMarcaCerveza;
    }

    public Double getParamPrecioDesde() {
        return paramPrecioDesde;
    }

    public void setParamPrecioDesde(Double paramPrecioDesde) {
        this.paramPrecioDesde = paramPrecioDesde;
    }

    public Double getParamPrecioHasta() {
        return paramPrecioHasta;
    }

    public void setParamPrecioHasta(Double paramPrecioHasta) {
        this.paramPrecioHasta = paramPrecioHasta;
    }

    public BaresT getSelectedBar() {
        return selectedBar;
    }

    public void setSelectedBar(BaresT selectedBar) {
        this.selectedBar = selectedBar;
    }

    public double getCervezaMasBarataEnBar() {
        return cervezaMasBarataEnBar;
    }

    public void setCervezaMasBarataEnBar(double cervezaMasBarataEnBar) {
        this.cervezaMasBarataEnBar = cervezaMasBarataEnBar;
    }
}
